package com.zhangxun.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.zhangxun.domain.UserAddr;
import com.zhangxun.service.UserAddrService;
import com.zhangxun.mapper.UserAddrMapper;
import com.zhangxun.util.SecurityUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Date;

/**
* @author 张循
* @description 针对表【user_addr(用户配送地址)】的数据库操作Service实现
* @createDate 2023-01-06 17:29:34
*/
@Service
public class UserAddrServiceImpl extends ServiceImpl<UserAddrMapper, UserAddr>
    implements UserAddrService{

    @Autowired
    private UserAddrMapper userAddrMapper;

    /**
     * 添加用户收货地址的方法。
     * 这里需要先查看用户之前的地址是否有设置默认收货地址。
     * 没有地址的话或者之前的地址没有默认收货地址，新增的地址设置为默认收货地址
     * @param userAddr
     * @return
     */
    @Override
    public boolean saveAddr(UserAddr userAddr) {

        String wxUserId = SecurityUtil.getWxUserId();

        //给地址对象设置值
        userAddr.setUserId(wxUserId);
        userAddr.setCreateTime(new Date());
        //查询当前用户是否有默认收货地址
        int count = userAddrMapper.selectCount(new LambdaQueryWrapper<UserAddr>()
                .eq(UserAddr::getUserId, wxUserId)
                .eq(UserAddr::getCommonAddr, 1));
        if(count <= 0){
            userAddr.setCommonAddr(1);
        }

        return userAddrMapper.insert(userAddr) > 0;

    }

    /**
     * 修改用户默认收获地址。两种方案
     * 1，先查询出用户之前的默认收获地址，修改，然后再修改新的默认收获地址。
     * 2，直接使用批量修改将用户的收货地址全部修改，再修改新设置的默认收货地址。
     * 这里选择第二种。
     * @param addrId
     * @return
     */
    @Override
    public Boolean updateDefaultAddr(Long addrId) {


        String userId = SecurityUtil.getWxUserId();
        this.update(new LambdaUpdateWrapper<UserAddr>()
                .set(UserAddr::getCommonAddr, 0)
                .eq(UserAddr::getUserId, userId));

        boolean update = this.update(new LambdaUpdateWrapper<UserAddr>()
                .set(UserAddr::getCommonAddr, 1)
                .eq(UserAddr::getAddrId, addrId));
        return update;

    }
}




